// 实现这个项目的构建任务

// 引入 sass 模块
const sass = require('sass')
// 用于加载grunt插件
const loadGruntTask = require('load-grunt-tasks')
module.exports = grunt =>{

    grunt.initConfig({
        babel:{
            options:{
                sourceMap:true,
                // 最新的 es 特性包做转换
                presets:['@babel/preset-env']
            },
            main:{
                files:{
                    'dist/assets/scripts/main.js':'src/assets/scripts/main.js'
                }
            }
        },
        // 压缩js 
        uglify: {
            my_target: {
              files: {
                'dist/assets/scripts/main.min.js': ['dist/assets/scripts/main.js']
              }
            }
          },
        // 为 sass 配置目标
        sass:{
            // implementation  使用哪个模块处理 sass编译。
            options:{
                sourceMap:true,
                implementation:sass//使用sass处理编译
            },
            main:{//配置目标： 输出文件:输入文件
                files:{
                    'dist/assets/styles/main.css':'src/assets/styles/main.scss'
                }
            }
        },
        // 拷贝静态文件
        copy:{
            main: {
                expand: true,
                src: 'public/*',
                dest: 'dist/',
            }
        },
        clean:{
            dist:'dist/**'
        },
        // 监视文件变化 file 被监听的文件，task 执行的任务  js/css 是目标
        watch:{
            js:{
                files:['src/assets/scripts/*.js'],
                task:['babel']
            },
            css:{
                files:['src/assets/styles/*.scss'],
                task:['sass']
            }
        }
    })

    //删除构建后的文件
    grunt.loadNpmTasks('grunt-contrib-clean') 

    //自动加载所有插件中的任务
    loadGruntTask(grunt)
    grunt.registerTask('develop',['sass','babel','watch'])
    grunt.registerTask('default',['clean','copy','sass','babel','uglify'])

}